Scripting languages are programming languages that can control other software components. Using a scripting language, a software developer can write a scripting program that leverages functionality present in software components to perform highly functional tasks. For example, a software developer can write a scripting program that controls operation of a web browser and/or server to provide a user interface with a deep set of features. In general, such a scripting program can be written in less time than a non-scripting program to provide the same feature set because the non-scripting program cannot as easily leverage the underlying functionality of the web browser and/or server. Thus, scripting languages generally have a positive impact on software developer productivity.
Due to their ability to control other software components, scripting programs must be executed within a specialized execution environment that includes the software components they control. While such reliance can be viewed as a limitation to the portability of scripting programs, where the controlled software components are common, such reliance may actually increase the portability of scripting program. For instance, one example of a scripting language that has gained widespread acceptance is JavaScript, which can be used to control operations of browsers. Due to the nearly ubiquitous nature of browsers, JavaScript programs can be executed on most computing devices.
Scripting programs are not without disadvantages. For instance, during execution, scripting programs are generally interpreted, line by line, from either source code or non-compiled intermediate code. This interpretation process requires computing resource and puts scripting programs at a disadvantage to programs that are compiled into natively executable code. This is so because natively executable code can be executed by the underlying computing hardware without an intervening interpreter. Thus, in general, interpreted programs, such as scripting programs, execute more slowly than natively executable programs that perform comparable functionality. This relatively slow execution speed can be compounded by the fact that interpreters are single-threaded and, therefore, sequentially execute instructions within scripting programs.